/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * VentanaEstadoTarea.java
 *
 * Created on 13/11/2011, 10:49:31 PM
 */
package cliente;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListModel;

/**
 *
 * @author Jesús Vásquez
 */
public class VentanaEstadoTarea extends javax.swing.JFrame {

    private int elementosListaSubida = 0;
    private int elementosListaDescarga;
    private ArrayList arregloRutaDelArchivo;
    
    private ArrayList rutaDeArchivoEnServidor;
    private ArrayList nombreDeArchivoEnServidor;
    
    String nombreUsuario;
    private String passUsuario;
    List<String> listaDeArchivos;
    lecturaArchivo leerArchivo;
    int puertoUsuario;
    String ipServidor;
    
    ClienteSocket clienteSocket;
    Socket socketPersonal;
    
    DefaultListModel modeloLista;
    
    
    
    /** Creates new form VentanaEstadoTarea */
    public VentanaEstadoTarea() {
        initComponents();
        arregloRutaDelArchivo = new ArrayList();
    }

    public VentanaEstadoTarea(String nombre,String pass) {
        initComponents();
        arregloRutaDelArchivo = new ArrayList();
        leerArchivo = new lecturaArchivo();
        nombreUsuario = nombre;
        try {
            listaDeArchivos = leerArchivo.LeerArchivosRepositorio(nombreUsuario);
        } catch (IOException ex) {
            Logger.getLogger(VentanaEstadoTarea.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        llenarModeloLista();
        elementosListaDescarga = 0;

    }    

    public VentanaEstadoTarea(String nombre,String pass, int puerto, String ip) throws IOException {
        initComponents();
        arregloRutaDelArchivo = new ArrayList();
        leerArchivo = new lecturaArchivo();
        nombreUsuario = nombre;
        puertoUsuario = puerto;
        ipServidor = ip;
        this.passUsuario = pass;
        elementosListaDescarga = 0;

        etiquetaInfoPuerto.setText(String.valueOf(puertoUsuario));
        
        crearSocket();
        listaDeArchivos = leerArchivo.LeerArchivosRepositorio(nombreUsuario);
        llenarModeloLista();
        //setear barra de progreso
        //barraSubidaA.setValue(80);
        
        
    }        
    
    public void crearSocket(){
        try {
            this.socketPersonal = new Socket(ipServidor, puertoUsuario);
            PrintWriter salida = new PrintWriter(this.socketPersonal.getOutputStream(), true);
            BufferedReader entrada = new BufferedReader(new InputStreamReader(this.socketPersonal.getInputStream()));
            InputStream llegada = this.socketPersonal.getInputStream();
            salida.println("<mensaje>Lista</mensaje>");
            salida.println("<Usuario>"+this.nombreUsuario+"</Usuario>");    
            String path = System.getProperty("user.dir") +"/tmp/"+this.nombreUsuario+"/Archivos.xml";
                    FileOutputStream destino = new FileOutputStream(path);
                    byte[] buffer = new byte[1024];
                    int len;                    
                    while (1 == 1) {
                        // try {
                        len = llegada.read(buffer);
                        if (len <= 0) {
                            System.out.println("Llego completo");
                            break;
                        } else {
                            destino.write(buffer, 0, len);
                        }
                }
                    destino.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void llenarModeloLista(){
        modeloLista = new DefaultListModel();
        for (int i = 0; i < listaDeArchivos.size(); i++) {
            modeloLista.addElement(listaDeArchivos.get(i));
        }
        
        listaDescarga.setModel(modeloLista);
    }
    
    public void prepararDescarga(){
        switch (listaDescarga.getSelectedIndex()){
            case 0:
                ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
                .descargarArchivo(progresoDescargaA,this.ipServidor,listaDescarga.getSelectedValue().toString());
            break;
            case 1:
                ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
                .descargarArchivo(progresoDescargaB,this.ipServidor,listaDescarga.getSelectedValue().toString());
            break;
            case 2:
                ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
                .descargarArchivo(progresoDescargaC,this.ipServidor,listaDescarga.getSelectedValue().toString());
            break;
            case 3:
                ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
                .descargarArchivo(progresoDescargaD,this.ipServidor,listaDescarga.getSelectedValue().toString());
            break;
            case 4:
                ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
                .descargarArchivo(progresoDescargaE,this.ipServidor,listaDescarga.getSelectedValue().toString());
            break;
            default:
                ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
                .descargarArchivo(progresoDescargaA,this.ipServidor,listaDescarga.getSelectedValue().toString());
            break;    
        }
        ClienteManejadorArchivos.getInstance(this.nombreUsuario, this.passUsuario)
        .descargarArchivo(progresoDescargaA,this.ipServidor,listaDescarga.getSelectedValue().toString());
        elementosListaDescarga += 1;
        
        
        
    }
    
    public void seleccionarArchivoSubida(){
        int valorDeRetornoSelector;
        File archivoSeleccionado;
        String nombreArchivo;
        String rutaArchivo;
        
        valorDeRetornoSelector = this.seleccionarArchivo.showOpenDialog(this.getParent());
        if (valorDeRetornoSelector == JFileChooser.APPROVE_OPTION) {
            archivoSeleccionado = seleccionarArchivo.getSelectedFile();
            try {
                nombreArchivo = archivoSeleccionado.getName();
                rutaArchivo = archivoSeleccionado.getAbsolutePath();
                this.listaSubida.append(nombreArchivo);
                switch (this.elementosListaSubida){
                    case 0:
                        ClienteManejadorArchivos.getInstance(this.nombreUsuario , this.passUsuario)
                        .subirArchivo(progresoSubidaA, rutaArchivo, this.ipServidor,nombreArchivo);
                        this.elementosListaSubida++;
                     break;
                     case 1:
                        ClienteManejadorArchivos.getInstance(this.nombreUsuario , this.passUsuario)
                        .subirArchivo(progresoSubidaB, rutaArchivo, this.ipServidor,nombreArchivo);
                        this.elementosListaSubida++;
                     break;
                     case 2:
                        ClienteManejadorArchivos.getInstance(this.nombreUsuario , this.passUsuario)
                        .subirArchivo(progresoSubidaC, rutaArchivo, this.ipServidor,nombreArchivo);
                        this.elementosListaSubida++;
                     break;
                     case 3:
                        ClienteManejadorArchivos.getInstance(this.nombreUsuario , this.passUsuario)
                        .subirArchivo(progresoSubidaD, rutaArchivo, this.ipServidor,nombreArchivo);
                        this.elementosListaSubida++;
                     break;
                     case 4:
                        ClienteManejadorArchivos.getInstance(this.nombreUsuario , this.passUsuario)
                        .subirArchivo(progresoSubidaE, rutaArchivo, this.ipServidor,nombreArchivo);
                        this.elementosListaSubida++;
                     break;    
                }
                
                System.out.println(rutaArchivo);
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(rootPane, "Archivo no encontrado", "Advertencia", JOptionPane.WARNING_MESSAGE);
                Logger.getLogger(VentanaEstadoTarea.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    public void removerArchivo(){
        //listaSubida.
        //elementosListaSubida -= 1;
    }
    
    public void limpiarLista(){
        listaSubida.removeAll();
        listaSubida.setText(null);
        arregloRutaDelArchivo.clear();
        elementosListaSubida = 0;
    }
    
    public void revisarCantidadSubida(String rutaArchivo, String nombreArchivo){
        if (arregloRutaDelArchivo.size() >= 5)
            JOptionPane.showMessageDialog(rootPane, "No pueden agregarse más archivos, máx 5 archivos");
        else{
            arregloRutaDelArchivo.add(rutaArchivo);
            System.out.println(arregloRutaDelArchivo.size());
            listaSubida.append(nombreArchivo+"\n");
            elementosListaSubida += 1;
        }
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        seleccionarArchivo = new javax.swing.JFileChooser();
        scrollListaDescarga = new javax.swing.JScrollPane();
        listaDescarga = new javax.swing.JList();
        etiquetaDescarga = new javax.swing.JLabel();
        etiqueteaProgresoDescarga = new javax.swing.JLabel();
        etiquetaSubida = new javax.swing.JLabel();
        etiquetaProgresoSubida = new javax.swing.JLabel();
        etiquetaPuerto = new javax.swing.JLabel();
        etiquetaInfoPuerto = new javax.swing.JLabel();
        botonDescarga = new javax.swing.JButton();
        botonSubida = new javax.swing.JButton();
        scrollListaSubida = new javax.swing.JScrollPane();
        listaSubida = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        progresoDescargaB = new javax.swing.JLabel();
        progresoDescargaA = new javax.swing.JLabel();
        progresoDescargaC = new javax.swing.JLabel();
        progresoDescargaD = new javax.swing.JLabel();
        progresoDescargaE = new javax.swing.JLabel();
        progresoSubidaE = new javax.swing.JLabel();
        progresoSubidaD = new javax.swing.JLabel();
        progresoSubidaC = new javax.swing.JLabel();
        progresoSubidaB = new javax.swing.JLabel();
        progresoSubidaA = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

        listaDescarga.setFont(new java.awt.Font("Tahoma", 0, 12));
        scrollListaDescarga.setViewportView(listaDescarga);

        etiquetaDescarga.setFont(new java.awt.Font("Tahoma", 0, 12));
        etiquetaDescarga.setText("Descarga");

        etiqueteaProgresoDescarga.setFont(new java.awt.Font("Tahoma", 0, 12));
        etiqueteaProgresoDescarga.setText("Progreso (Kb)");

        etiquetaSubida.setFont(new java.awt.Font("Tahoma", 0, 12));
        etiquetaSubida.setText("Subida");

        etiquetaProgresoSubida.setFont(new java.awt.Font("Tahoma", 0, 12));
        etiquetaProgresoSubida.setText("Progreso (Kb)");

        etiquetaPuerto.setFont(new java.awt.Font("Tahoma", 0, 12));
        etiquetaPuerto.setText("Puerto de conexión:");

        etiquetaInfoPuerto.setFont(new java.awt.Font("Tahoma", 0, 12));
        etiquetaInfoPuerto.setText("...");

        botonDescarga.setText("Descargar...");
        botonDescarga.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDescargaActionPerformed(evt);
            }
        });

        botonSubida.setText("Agregar");
        botonSubida.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSubidaActionPerformed(evt);
            }
        });

        listaSubida.setColumns(20);
        listaSubida.setEditable(false);
        listaSubida.setRows(5);
        scrollListaSubida.setViewportView(listaSubida);

        jButton1.setText("Regresar...");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        progresoDescargaB.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoDescargaB.setText("...");

        progresoDescargaA.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoDescargaA.setText("...");

        progresoDescargaC.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoDescargaC.setText("...");

        progresoDescargaD.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoDescargaD.setText("...");

        progresoDescargaE.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoDescargaE.setText("...");

        progresoSubidaE.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoSubidaE.setText("...");

        progresoSubidaD.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoSubidaD.setText("...");

        progresoSubidaC.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoSubidaC.setText("...");

        progresoSubidaB.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoSubidaB.setText("...");

        progresoSubidaA.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        progresoSubidaA.setText("...");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(etiquetaSubida)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                            .addComponent(etiquetaPuerto)
                            .addGap(37, 37, 37)
                            .addComponent(etiquetaInfoPuerto)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 249, Short.MAX_VALUE)
                            .addComponent(jButton1))
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(etiquetaDescarga)
                                .addComponent(botonDescarga, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(botonSubida, javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(scrollListaDescarga, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)
                                .addComponent(scrollListaSubida, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE))
                            .addGap(18, 18, 18)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(progresoDescargaB)
                                .addComponent(progresoDescargaA)
                                .addComponent(progresoDescargaC)
                                .addComponent(progresoDescargaD)
                                .addComponent(progresoDescargaE)
                                .addComponent(etiqueteaProgresoDescarga)
                                .addComponent(progresoSubidaB)
                                .addComponent(progresoSubidaA)
                                .addComponent(progresoSubidaC)
                                .addComponent(progresoSubidaD)
                                .addComponent(progresoSubidaE)
                                .addComponent(etiquetaProgresoSubida)))))
                .addGap(28, 28, 28))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(etiquetaPuerto)
                    .addComponent(etiquetaInfoPuerto)
                    .addComponent(jButton1))
                .addGap(35, 35, 35)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(etiquetaDescarga)
                    .addComponent(etiqueteaProgresoDescarga))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(scrollListaDescarga, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(botonDescarga))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(progresoDescargaA)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoDescargaB)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoDescargaC)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoDescargaD)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoDescargaE)))
                .addGap(22, 22, 22)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(etiquetaSubida)
                    .addComponent(etiquetaProgresoSubida))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(scrollListaSubida, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(14, 14, 14)
                        .addComponent(botonSubida))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(progresoSubidaA)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoSubidaB)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoSubidaC)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoSubidaD)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(progresoSubidaE)))
                .addGap(94, 94, 94))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void botonDescargaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDescargaActionPerformed
    prepararDescarga();
}//GEN-LAST:event_botonDescargaActionPerformed

private void botonSubidaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSubidaActionPerformed
    seleccionarArchivoSubida();
}//GEN-LAST:event_botonSubidaActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        this.dispose();
        clienteSocket = new ClienteSocket();
        clienteSocket.setVisible(true);
    }//GEN-LAST:event_jButton1ActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonDescarga;
    private javax.swing.JButton botonSubida;
    private javax.swing.JLabel etiquetaDescarga;
    private javax.swing.JLabel etiquetaInfoPuerto;
    private javax.swing.JLabel etiquetaProgresoSubida;
    private javax.swing.JLabel etiquetaPuerto;
    private javax.swing.JLabel etiquetaSubida;
    private javax.swing.JLabel etiqueteaProgresoDescarga;
    private javax.swing.JButton jButton1;
    private javax.swing.JList listaDescarga;
    private javax.swing.JTextArea listaSubida;
    private javax.swing.JLabel progresoDescargaA;
    private javax.swing.JLabel progresoDescargaB;
    private javax.swing.JLabel progresoDescargaC;
    private javax.swing.JLabel progresoDescargaD;
    private javax.swing.JLabel progresoDescargaE;
    private javax.swing.JLabel progresoSubidaA;
    private javax.swing.JLabel progresoSubidaB;
    private javax.swing.JLabel progresoSubidaC;
    private javax.swing.JLabel progresoSubidaD;
    private javax.swing.JLabel progresoSubidaE;
    private javax.swing.JScrollPane scrollListaDescarga;
    private javax.swing.JScrollPane scrollListaSubida;
    private javax.swing.JFileChooser seleccionarArchivo;
    // End of variables declaration//GEN-END:variables
}
